import SApi from "./ServiceApi";
/*
业务所有用到本地缓存助手
key的格式为hnair_cache_[自定义]
 */

var CacheHandle={
	isNative:false,
	//由于IOS是全H5而Android是部分H5，对于一些特定的业务场景，比如登陆信息，Android的登陆信息
	//会缓存到native，而H5会缓存到localStorge，为了模块通用，又不想回调太多，因此在此转换一下思路
	//将手机缓存看做高速数据库，app启动时，h5将native缓存数据读取到localStorge,执行更新和删除时
	//同时删除手机缓存和localStorge，而页面读取缓存时则读取localStorge即可。如此一来就不需要页面通过
	//回调的方法来进行缓存的使用，也同时为了兼容WEB版本。
	init:function(){ 
		//判断页面是否有cordova对象并且设备已经准备完毕
		if(window.cordova&&window.cordova.ready){ 
			this.isNative=true;
			SApi.cache.getAll(function(rs){
				var rs=JSON.parse(rs);
				if(rs.success){
					for(var key in rs.data.result){
						var value=rs.data.result[key];
						window.localStorage.removeItem(key);
			 			window.localStorage.setItem(key,value);
					}
				}
				
			});
		}
	},
	keys:{
		hna_cache_date_picker:"hna_cache_date_picker",//价格日历选择界面的视图数据缓存
		hna_cache_book_model:"hna_cache_book_model",//最后一次航班查询的条件
		hna_cache_city_list:"hna_cache_city_list",//城市列表缓存
		hna_cache_city_list_time:"hna_cache_city_list_time",   //缓存城市列表的时间--半个小时更新一次
		hna_cache_price_date:"hna_cache_price_date_{2}_{0}{1}",//价格日历服务器数据,后面拼接的是0起飞城市,1抵达城市,2日期yyyymmdd
		hna_cache_login_account:"hna_cache_login_account",//登陆用户
		//hna_cache_login_password:"hna_cache_login_password",//登陆密码
		hna_cache_countrys:"hna_cache_countrys",// 国家缓存
		hna_cache_account_countrys:"hna_cache_account_countrys",    //国家缓存--北美航线，这里不做任何处理
		hna_cache_isLogined:"hna_cache_isLogined",// 是否已登录
		hna_cache_login_user_data:"hna_cache_login_user_data",//客户端如cordova缓存的登陆用户信息
		hna_cache_default_location:"hna_cache_default_location",//第一次启动或未进行查询时进行的城市定位
		hna_cache_user_token:"hna_cache_user_token",//登陆后记住token
		hna_cache_user_secret:"hna_cache_user_secret",//登陆后记住hna_cache_user_secret
		hna_cache_payed_orders:"hna_cache_payed_orders",  //已经支付的订单
		hna_cache_check_in_check_code_key_exp:"hna_cache_check_in_check_code_{0}_{1}",//每次值机的唯一值 0 是票号,ticketNo,1是航段号
		hna_cache_last_login_time:"hna_cache_last_login_time"//最后一次登陆的时间
	},
	//设置值
	set:function(key,value) {
	 	if(typeof(value)!=="string"){
	 		value=JSON.stringify(value);
	 	}
		if(value){
			//在iPhone/iPad上有时设置setItem()时会出现诡异的QUOTA_EXCEEDED_ERR错误,先执行删除确保不会出错 
	 		window.localStorage.removeItem(key);
	 		window.localStorage.setItem(key,value);
			if(this.isNative){
				SApi.cache.set(key,value);
			} 
	 	}
	 	//this.clearInvalidCache();
	},
	//取值
	get:function(key){ 
		return window.localStorage.getItem(key);
	},
	//取出值是obj
	getObj:function(key){
        return JSON.parse(window.localStorage.getItem(key)) ;
	},
	//清除值
	remove:function(key){
		if(this.isNative){
			SApi.cache.remove(key);
		}
		window.localStorage.removeItem(key);
	},
	//清除过期的缓存
	clearInvalidCache:function(){
		this.clearInvalidPriceDate();
	},
	//价格日历的过期价格需要清除
	clearInvalidPriceDate:function(){
		var d=parseInt(new Date().format("yyyyMMdd"));
		for(var i=0;i<window.localStorage.length;i++){
			var key=window.localStorage.key(i); 
			if(key.indexOf("hna_cache_price_date")>-1){
				var d1=parseInt(key.split("_")[4]);
				if(d1<d){
					this.remove(key);
				} 
			}
		}
	}
};
module.exports=CacheHandle;